汇编语言之子程序

您所在的位置:网站首页 汇编 datapercpu 汇编语言之子程序

汇编语言之子程序

2024-06-05 14:00| 来源: 网络整理| 查看: 265

(1)子程序的类型不同,对子程序的使用会带来什么不同 (2)子程序的定义该放在哪里? (3)子程序和宏指令的区别?

子程序又称为过程,相当于高级语言的过程或函数,是一个独立的程序段,能完成某些确定的功能,并能被其它程序调用。 1)过程的定义 过程名 PROC 类型 。 。 。 RET 过程名 ENDP

类型:2种 near 段内,进程调用,偏移地址压入堆栈 far 段间, 2)过程的调用 CALL 过程名 a、段内调用

CSEG SEGMENT CALL SUBT MOV AH,4CH INT 21H SUBT PROC NEAR RET SUBT ENDP CSEG ENDS

b、段间调用

XSEG SEGMENT . . . CALL SUBT1 . . . MOV AH,4CH INT 21H SUBT1 PROC FAR . . . RET SUBT1 ENDP XSEG ENDS YSEG SEGMENT . . . CALL SUBT1 . . . YSEG ENDS

3)子程序在源程序中的位置 子程序一般是放在返回DOS语句和段结束语句之间的位置。因为在正常情况下这个区域的程序是不会被执行的。 4)宏指令与子程序 a、空间开销:子程序优于宏指令 b、时间开销:宏指令优于子程序 总上,当需多次访问的程序段较长,访问次数又不是太多时,选用子程序结构较好。当需多次访问的程序段较短,访问次数又很频繁时,选用宏指令结构更好。 5)子程序调用和宏调用使用例子: 在这里插入图片描述 A、子程序方法编程

DATA SEGMENT HEXDATA DW 4D7EH RESULT DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,4 LEA SI,HEXDATA LEA DI,RESULT MOV BX,[SI] NEXT: MOV AX,BX AND AL,0FH CALL HEXASC MOV [DI],AL INC DI PUSH CX MOV CX,4 SHR BX,CL POP CX LOOP NEXT LEA SI,RESULT+3 MOV CX,4 STD LOOP1: LODSB MOV DL,AL MOV AH,02H MOV AH,02H INT 21H LOOP LOOP1 MOV DL,'H' MOV AH,02H INT 21H MOV AH,4CH INT 21H HEXASC PROC CMP AL,0AH JB PLUS30 ADD AL,07H PLUS30:ADD AL,30H RET HEXASC ENDP CODE ENDS END START

B、用宏指令方法编程

DATA SEGMENT HEXDATA DW 4D7EH RESULT DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX HEXASC MACRO CMP AL,OAH JB PLUS30 ADD AL,07H PLUS30: ADD AL,30H ENDM MOV CX,4 LEA SI,HEXDATA LEA DI,RESULT MOV BX,[SI] NEXT: MOV AX,BX AND AL,0FH HEXASC MOV [DI],AL INC DI PUSH CX MOV CX,4 SHR BX,CL POP CX LOOP NEXT LEA SI,RESULT+3 MOV CX,4 STD LOOP1: LODSB MOV DL,AL MOV AH,02H INT 21H LOOP LOOP1 MOV DL,'H' MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3